BTJoint

image149.gif

The BT Joint is used to created BulletPhysics Joints between particles. This can be done at any time and can be controlled in a variety of ways, most basically with the On input. The only required inputs are the Particle From and Particle To which define the two particles involved, where one particle is identified as the start of the joint (From) and the other as the end of the joint (To).

The joint occupies a single point in space, which can be specified with either the Position From and Position To, or with the World Position. Position From and Position To can sometimes be difficult to calculate as the same point in space, so the World Position input is often preferred. (If you simply use the Particle From position as the Position From, and the Particle To's position as Position To, the joint will likely behave erratically and explode because the single point in space is attempting to exist in two locations at once.)

Calculating the joint World Position can be as simple as averaging the two particle positions with an Expression operator ((v1+v2)/2). Keep in mind that as a single point in space the joint would ideally be located somewhere in-between the two particle meshes. This can require more advanced calculations, such as using an Intersect calculation from each particle towards the other particle in order to get a surface position on each particle mesh, then averaging those two positions. Of course you could also simply calculate one Intersect and use that one result as the joint location. The options are wide open.

Once the joint is defined you can connect the Joint* output to an BTJointDataOperator to create additional properties such as velocity and rotational breaking thresholds, or spring values, or dampening, etc.

Operator Inputs
  

ON - (Bool) This input data stream determines whether the operator is considered 'on' or 'off.' You can connect other operators to this input channel such as a Bool Helper to activate/deactivate the whole operator.

Time
- (Time) This input data stream is used to define the local time for the operator when the user wants to override the default system time.

Particle From
- sets the "From" particle ID that will be used to create a Joint

Particle To
- sets the "To" particle ID that will be used to create a Joint

Important
You must supply both object space positions when using these inputs. One input alone will cause an invalid Joint. This Joint position in space should be the same point in world space for each of the positions you feed into these inputs.

Position From - defines the joint position in object space as seen from the "From" particle where the Joint will be placed between the two Joint partners.

Position To
- defines the joint position in object space as seen from the "To" particle where the Joint will be placed between the two Joint partners.

Type
- lets you set the type of Joint that will be created between the two particles. Possible options are:

0 = Point To Point
1 = Hinge
2 = Cone Twist
3 = Slider
4 = D6
5 = D6 Spring
6 = Rope Anchor

World Position - inputs the Joint's position in world space coordinates that needs to be created between the two particles.

World Alignment
- inputs the Joint's alignment in world space coordinates that needs to be created between the two particles.

Operator Outputs
  

Joint - outputs the currently created joint ID. The BT Joint is used to created BulletPhysics Joints between particles.

Rollout Menu

image150.gif

Collision - lets you choose, from the drop down menu, the physics engine solver to use for the Joint simulation. All compatible solvers found in the thinkingParticles setup will be automatically listed.

Type
- lets you choose a certain type of Joint for the particle pair, connected to this operator.

0 = Point To Point
1 = Hinge
2 = Cone Twist
3 = Slider
4 = D6
5 = D6 Spring
6 = Rope Anchor

Find below a description of the supported constraint types.

 

Point to Point Joint

pointtopoint.jpg

The point to point constraint limits the translation so that the local pivot points of two rigid bodies match in world space. A chain of rigid bodies can be connected using this constraint.  

 

Hinge Joint

hingecontstraint.jpg

The hinge constraint, restricts two additional angular degrees of freedom, so the body can only rotate around one axis, the hinge axis.  This can be useful to represent doors and wheels rotating around one axis.  Various limits and the use of a motor can be specified for this joint type.  

Cone Twist Joint

To create ragdolls, for example,  the cone twist constraint is very useful for limbs; like the upper arm. It is a special point to point constraint that adds cone and twist axis limits. The x-axis serves as a twist axis.

 

Slider Joint

slider_constraint.jpg

The slider constraint allows the body to rotate around one axis and translate along this axis.  

 

D6 Joint

This generic constraint can emulate a variety of standard constraints, by configuring each of the six degrees of freedom (DOF).  The first 3 DOF axis are linear axis, which represent translation of rigid bodies, and the latter 3 DOF axis represent the angular motion. Each axis can be either locked, free or limited.  Keep in mind that several combinations that include free and/or limited angular degrees of freedom are undefined.  

D6 Spring

This joint is a modification of the original D6 Joint to support springs. it is important to note, that this joint type is either a spring or a motor but not both at the same type.

 

Rope Anchor

This type of joint is only working with ropes, and its purpose is to link a rope knot to an object.